セキュリティ監査状況を採点〜CISベンチマークを読んでみた(Amazon Linux2編)
こんにちは、杉金です。
社内でLinux関連の改善に取り組んでいるのですが、その中でCISベンチマークについて連携してもらいました。 Amazon Linuxは以前下記ブログで紹介されていますので、今回はAmazon Linux2版を紹介しちゃいます!
セキュリティ監査状況を採点〜CISベンチマークを読んでみた(Amazon Linux編)
リストは以下になります。上記ブログ(Amazon linux版)との違いにもコメントしていきます。
Amazon Linux2版CISベンチマーク
1.初期セットアップ
ファイルシステム設定
- cramfsファイルシステムのマウントが無効になっていること(Level1,Scored)
- hfsファイルシステムのマウントが無効になっていること(Level1,Scored)
- hfsplusファイルシステムのマウントが無効になっていること(Level1,Scored)
- squashfsファイルシステムのマウントが無効になっていること(Level1,Scored)
- udfファイルシステムのマウントが無効になっていること(Level1,Scored)
- /tmpが構成されていること(Level1,Scored)
- /tmpパーティションにnodevオプションが設定されていること(Level1,Scored)
- /tmpパーティションにnosuidオプションが設定されていること(Level1,Scored)
- /tmpパーティションにnoexecオプションが設定されていること(Level1,Scored)
- /varに個別のパーティションが存在すること(Level2,Scored)
- /var/tmpに個別のパーティションが存在すること(Level2,Scored)
- /var/tmpパーティションにnodevオプションが設定されていること(Level1,Scored)
- /var/tmpパーティションにnosuidオプションが設定されていること(Level1,Scored)
- /var/tmpパーティションにnoexecオプションが設定されていること(Level1,Scored)
- /var/logに個別のパーティションが存在すること(Level1,Scored)
- /var/log/auditに個別のパーティションが存在すること(Level2,Scored)
- /homeに個別のパーティションが存在すること(Level2,Scored)
- /homeパーティションにnodevオプションが設定されていること(Level1,Scored)
- /dev/shmパーティションにnodevオプションが設定されていること(Level1,Scored)
- /dev/shmパーティションにnosuidオプションが設定されていること(Level1,Scored)
- /dev/shmパーティションにnoexecオプションが設定されていること(Level1,Scored)
- 誰でも書き込めるディレクトリにはSticky Bitを設定されていること(Level1,Scored)
- 自動マウントを無効にする(Level1,Scored)
[コメント]自動マウント無効が新たに増えてます。最新Amazon Linux版にも記載されていますのでどこかのタイミングで追加されたのだと思われます。ポータブルハードディスクが接続されたときに自動で認識させないためのものです。
ソフトウェアアップデート設定
- パッケージマネージャーリポジトリが構成されていること(Level1,NotScored)
- GPGキーが構成されていること(Level1,NotScored)
- gpgcheckがグローバルにアクティブ化されていること(Level1,Scored)
[コメント]最新のソフトウェア・アップデートを取得するという項目が無くなっています。リストからは無くなっていますが説明として必要に応じたアップデートは推奨されていますので、特別な要件が無ければ搭載ソフトウェアは最新化しましょう。
ファイルシステムの整合性チェック
- AIDE(ファイル改ざん検知)がインストールされていること(Level1,Scored)
- ファイルシステムの整合性が定期的にチェックされていること(Level1,Scored)
[コメント]項目は同じなのですがLevel2→1に変わっています。レベルとかスコアって何?については本記事の最後に記載します。
安全なBoot設定
- ブートローダー構成のアクセス許可が構成されていること(Level1,Scored)
- シングルユーザーモードに必要な認証を確認する(Level1,Scored)
プロセスハードニング
- コアダンプが制限されていること(SLevel1,cored)
- アドレス空間配置のランダム化(ASLR)が有効になっていること(Level1,Scored)
- prelinkが無効になっていること(Level1,Scored)
[コメント]CentOS7からprelinkはデフォルトで無効になっていました。prelinkはAIDE(ファイル改ざん検知)の動作を阻害し、悪意のあるユーザがlibcなどの一般的なライブラリを危険にさらす可能性があります。
SELinux
- ブートローダー構成でSELinuxが無効になっていないこと(Level2,Scored)
- SELinux状態がenforcingであること(Level2,Scored)
- SELinuxポリシーが構成されていること(Level2,Scored)
- SETroubleshootがインストールされていないこと(Level2,Scored)
- MCS翻訳サービス(mcstrans)がインストールされていないこと(Level2,Scored)
- SELinuxで制限されないプロセスが存在しないこと(Level2,Scored)
- SELinuxがインストールされていること(Level2,Scored)
警告バナー
- /etc/motdが適切に構成されていること(Level1,Scored)
- ローカルログイン警告バナーが正しく構成されていること(Level1,NotScored)
- リモートログイン警告バナーが正しく構成されていること(Level1,NotScored)
- /etc/motdの権限が構成されていること(Level1,NotScored)
- /etc/issueの権限が構成されていること(Level1,Scored)
- /etc/issuenetの権限が構成されていること(Level1,NotScored)
- アップデート、パッチ、および追加のセキュリティソフトウェアがインストールされていること(Level1,Scored)
[コメント]前は別の章にあったのですが、この章に統合されました。
2.OSサービス
特別な用途のサービス
- 時刻同期が使用されていること(Level1,NotScored)
- ntpが構成されていること(Level1,Scored)
- chronyが構成されていること(Level1,Scored)
- X Window Systemがインストールされていないこと(Level1,Scored)
- Avahiサーバーが有効になっていないこと(Level1,Scored)
- CUPSが有効になっていないこと(Level1,Scored)
- DHCPサーバーが有効になっていないこと(Level1,Scored)
- LDAPサーバーが有効になっていないこと(Level1,Scored)
- NFSとRPCが有効になっていないこと(Level1,Scored)
- DNSサーバーが有効になっていないこと(Level1,Scored)
- FTPサーバーが有効になっていないこと(Level1,Scored)
- HTTPサーバーが有効になっていないこと(Level1,Scored)
- IMAPおよびPOP3サーバーが有効になっていないこと(Level1,Scored)
- Sambaが有効になっていないこと(Level1,Scored)
- HTTPプロキシサーバーが有効になっていないこと(Level1,Scored)
- SNMPサーバーが有効になっていないこと(Level1,Scored)
- メール転送エージェントがローカル専用モードに設定されていること(Level1,Scored)
- NISサーバーが有効になっていないこと(Level1,Scored)
- rshサーバーが有効になっていないこと(Level1,Scored)
- telnetサーバーが有効になっていないこと(Level1,Scored)
- tftpサーバーが有効になっていないこと(Level1,Scored)
- rsyncサービスが有効になっていないこと(Level1,Scored)
- talkサーバーが有効になっていないこと(Level1,Scored)
クライアント
- NISクライアントがインストールされていないこと(Level1,Scored)
- rshクライアントがインストールされていないこと(Level1,Scored)
- talkクライアントがインストールされていないこと(Level1,Scored)
- telnetクライアントがインストールされていないこと(Level1,Scored)
- LDAPクライアントがインストールされていないこと(Level1,Scored)
[コメント]最新AMIから起動したらデフォルトでchronyがAmazon time sync serviceと同期取っていますね。
3.ネットワーク設定、Firewall
ネットワークパラメータ設定(Host Only)
- IP転送が無効になっていること(Level1,Scored)
- パケットリダイレクト送信が無効になっていること(Level1,Scored)
ネットワークパラメータ設定(Host and Router)
- ソースルーティングされたパケットが受け入れられないこと(Level1,Scored)
- ICMPリダイレクトが受け入れられないこと(Level1,Scored)
- 安全なICMPリダイレクトが受け入れられないこと(Level1,Scored)
- 疑わしいパケットがログに記録されていること(Level1,Scored)
- ブロードキャストICMP要求が無視されること(Level1,Scored)
- 偽のICMP応答が無視されるようにする(Level1,Scored)
- リバースパスフィルタリングが有効になっていること(Level1,Scored)
- TCP SYN Cookieが有効になっていること(Level1,Scored)
- IPv6ルーターアドバタイズメントが受け入れられないこと(Level1,Scored)
TCP Wrapperのインストール
- TCP Wrappersがインストールされています(Level1,Scored)
- /etc/hostsallowが構成されていること(Level1,NotScored)
- /etc/hostsdenyが構成されていること(Level1,NotScored)
- /etc/hostsallowの権限が構成されていること(Level1,Scored)
- /etc/hostsdenyの権限が構成されていること(Level1,Scored)
特別な用途のプロトコル
- DCCPが無効になっていること(Level1,NotScored)
- SCTPが無効になっていること(Level1,NotScored)
- RDSが無効になっていること(Level1,NotScored)
- TIPCが無効になっていること(Level1,NotScored)
ファイアウォール構成(IPv4 iptables)
- デフォルトのファイアウォールポリシーの拒否を確認する(Level1,Scored)
- ループバックトラフィックが構成されていること(Level1,Scored)
- アウトバウンド接続と確立された接続が構成されていること(Level1,NotScored)
- 開いているすべてのポートにファイアウォールルールが存在すること(Level1,Scored)
ファイアウォール構成(IPv6 ip6tables)
- IPv6のデフォルトでファイアウォールポリシーを拒否すること(Level1,Scored)
- IPv6ループバックトラフィックが構成されていること(Level1,Scored)
- IPv6アウトバウンド接続と確立された接続が構成されていること(Level1,NotScored)
- 開いているすべてのポートにIPv6ファイアウォールルールが存在すること(Level1,NotScored)
- iptablesがインストールされていること(Level1,Scored)
- IPv6を無効にする(Level2,NotScored)
[コメント]ip6tablesについて追加されており、その上でIPv6は無効にする形です。IPv6無効はLevel1→2に変わっていました。
4.ログ、監査
auditd設定
- 監査ログのストレージサイズが構成されていること(Level2,NotScored)
- 監査ログフル時のシステム停止(Level2,Scored)
- 監査ログが自動的に削除されないようにする(Level2,Scored)
- 監査済みサービスが有効になっていること(Level2,Scored)
- auditdの前に開始するプロセスの監査が有効になっていること(Level2,Scored)
- 日付と時刻の情報を変更するイベントが収集されていること(Level2,Scored)
- ユーザー/グループ情報を変更するイベントが収集されていること(Level2,Scored)
- システムのネットワーク環境を変更するイベントが収集されていること(Level2,Scored)
- システムの強制アクセス制御を変更するイベントが収集されていること(Level2,Scored)
- ログインイベントとログアウトイベントが収集されていること(Level2,Scored)
- セッション開始情報が収集されていること(Level2,Scored)
- ディレクトリパーミッションイベントの収集(Level2,Scored)
- 許可されないファイルへのアクセス失敗記録の収集(Level2,Scored)
- 特権コマンドの使用が収集されていること(Level2,Scored)
- 正常なファイルシステムのマウントが収集されていること(Level2,Scored)
- ユーザーによるファイル削除イベントが収集されていること(Level2,Scored)
- システム管理スコープ(sudoers)への変更が収集されていること(Level2,Scored)
- システム管理者のアクション(sudolog)が収集されていること(Level2,Scored)
- カーネルモジュールのロードとアンロードが収集されていること(Level2,Scored)
- 監査構成が不変であること(Level2,Scored)
ロギング(rsyslog)
- rsyslogサービスが有効になっていること(Level1,Scored)
- ロギングが構成されていること(Level1,NotScored)
- rsyslogのデフォルトのファイル権限が構成されていること(Level1,Scored)
- rsyslogがログをリモートログホストに送信するように構成されていること(Level1,Scored)
- リモートrsyslogメッセージが指定されたログホストでのみの許可設定(Level1,NotScored)
ロギング(syslog-ng)
- syslog-ngサービスが有効になっていること(Level1,Scored)
- ロギングが構成されていること(Level1,NotScored)
- syslog-ngのデフォルトのファイル権限が構成されていること(Level1,Scored)
- syslog-ngがリモートログホストにログを送信するように構成されていること(Level1,NotScored)
- リモートsyslog-ngメッセージが指定されたログホストでのみ受け入れられるようにします(Level1,NotScored)
- rsyslogまたはsyslog-ngがインストールされていること(Level1,Scored)
- すべてのログファイルに対するアクセス許可が構成されていること(Level1,Scored)
- logrotateが構成されていること(Level1,NotScored)
[コメント]前回記事にもコメントありますようにCloudWatch logsを活用しましょう。
5.アクセス制御
cron設定
- cronデーモンが有効になっていること(Level1,Scored)
- /etc/crontabの権限が構成されていること(Level1,Scored)
- /etc/cronhourlyの権限が構成されていること(Level1,Scored)
- /etc/crondailyの権限が構成されていること(Level1,Scored)
- /etc/cronweeklyの権限が構成されていること(Level1,Scored)
- /etc/cronmonthlyの権限が構成されていること(Level1,Scored)
- /etc/crondの権限が構成されていること(Level1,Scored)
- at/cronが許可されたユーザーに制限されていること(Level1,Scored)
SSH設定
- /etc/ssh/sshd_configのアクセス許可が構成されていること(Level1,Scored)
- SSH private host keyのアクセス許可が構成されていること(Level1,Scored)
- SSHパブリックホストキーファイルのアクセス許可が構成されていること(Level1,Scored)
- SSHプロトコルが2に設定されていること(Level1,Scored)
- SSH LogLevelが適切であること(Level1,Scored)
- SSH X11転送が無効になっていること(Level2,Scored)
- SSH MaxAuthTriesが4以下に設定されていること(Level1,Scored)
- SSH IgnoreRhostsが有効になっていること(Level1,Scored)
- SSH HostbasedAuthenticationが無効になっていること(Level1,Scored)
- SSHルートログインが無効になっていること(Level1,Scored)
- SSH PermitEmptyPasswordsが無効になっていること(Level1,Scored)
- SSH PermitUserEnvironmentが無効になっていること(Level1,Scored)
- 強力な暗号のみが使用されていること(Level1,Scored)
- 強力なMACアルゴリズムのみが使用されていること(Level1,Scored)
- 強力な鍵交換アルゴリズムが使用されていること(Level1,Scored)
- SSHアイドルタイムアウト間隔が構成されていること(Level1,Scored)
- SSH LoginGraceTimeが1分以下に設定されていること(Level1,Scored)
- SSHアクセスが制限されていること(Level1,Scored)
- SSH警告バナーが設定されていること(Level1,Scored)
PAM設定
- パスワード作成要件が構成されていること(Level1,Scored)
- 失敗したパスワード試行のロックアウトが構成されていること(Level1,Scored)
- パスワードの再利用が制限されていること(Level1,Scored)
- パスワードハッシュアルゴリズムがSHA-512であること(Level1,Scored)
ユーザ環境
- パスワードの有効期限が365日以内であること(Level1,Scored)
- パスワード変更の最小日数が7日以上であること(Level1,Scored)
- パスワードの有効期限の警告日が7日以上であること(Level1,Scored)
- 非アクティブなパスワードロックが30日以内であること(Level1,Scored)
- すべてのユーザーの最終パスワード変更日が過去であること(Level1,Scored)
- システムアカウントがログインしていないこと(Level1,Scored)
- rootアカウントのデフォルトグループがGID0であること(Level1,Scored)
- デフォルトのユーザーumaskが027以上の制限であること(Level1,Scored)
- デフォルトのユーザーシェルタイムアウトが900秒以下であること(Level2,Scored)
- rootログインがシステムコンソールに制限されていること(Level1,NotScored)
- suコマンドへのアクセスが制限されていること(Level1,Scored)
[コメント]X11転送がLevel1→2に変わっていました。X Window Systemを使わないため当然の設定に思えます。ユーザ環境の部分は具体的な推奨値が記載されるようになりました。できるだけパスワード認証は避けたいですが、万が一のシリアルコンソール接続を使用するのならパスワード認証は必要になってきますね。
6.システムメンテナンス
システムファイルのパーミッション
- システムファイルのアクセス許可を監査します(Level2,NotScored)
- /etc/passwdの権限が構成されていること(Level1,Scored)
- /etc/shadowの権限が構成されていること(Level1,Scored)
- /etc/groupの権限が構成されていること(Level1,Scored)
- /etc/gshadowの権限が構成されていること(Level1,Scored)
- /etc/passwd-の権限が構成されていること(Level1,Scored)
- /etc/shadow-の権限が構成されていること(Level1,Scored)
- /etc/group-の権限が構成されていること(Level1,Scored)
- /etc/gshadow-の権限が構成されていること(Level1,Scored)
- 世界で書き込み可能なファイルが存在しないこと(Level1,Scored)
- 所有されていないファイルまたはディレクトリが存在しないこと(Level1,Scored)
- グループ化されていないファイルまたはディレクトリが存在しないこと(Level1,Scored)
- SUID実行可能ファイルの監査(Level1,NotScored)
- SGID実行可能ファイルの監査(Level1,NotScored)
ユーザ、グループ設定
- パスワードフィールドが空でないこと(Level1,Scored)
- /etc/passwdにレガシー「+」エントリが存在しないこと(Level1,Scored)
- /etc/shadowにレガシー「+」エントリが存在しないこと(Level1,Scored)
- /etc/groupにレガシー「+」エントリが存在しないこと(Level1,Scored)
- ルートが唯一のUID0アカウントであること(Level1,Scored)
- ルートPATHの整合性(Level1,Scored)
- すべてのユーザーのホームディレクトリが存在すること(Level1,Scored)
- ユーザーのホームディレクトリのアクセス許可が750以上に制限されていること(Level1,Scored)
- ユーザーが自分のホームディレクトリを所有していること(Level1,Scored)
- ユーザーのドットファイルがグループまたは誰でも書き込み可能でないこと(Level1,Scored)
- 転送ファイルを持っているユーザーがいないこと(Level1,Scored)
- ユーザーがnetrcファイルを持っていないこと(Level1,Scored)
- ユーザーのnetrcファイルがグループまたは誰でも読み取り可能でないこと(Level1,Scored)
- ユーザーがrhostsファイルを持っていないこと(Level1,Scored)
- /etc/passwd内のすべてのグループが/etc/groupに存在すること(Level1,Scored)
- 重複するUIDが存在しないこと(Level1,Scored)
- 重複するGIDが存在しないこと(Level1,Scored)
- 重複するユーザー名が存在しないこと(Level1,Scored)
- 重複するグループ名が存在しないこと(Level1,Scored)
Amazon Linuxとの違い
Amazon Linux版のブログ記事と比較すると少しだけ違いがありますが、最新版のAmazon Linux資料と比較するとチェック項目はほぼ同一です。CISベンチマーク資料には具体的な設定の解説や理由など詳細に載っていますので、そちらを見ると細かな違いが見えてきます。
スコアとレベルについて
初めてCISベンチマークをご覧になられる方もいるかと思いますので解説しますと、各リスト末尾のカッコ内にレベルとスコアについて記載しています。
スコアとは
CISベンチマークは推奨とされる設定がリストになっており、Scoredとなっているものはチェックをつけるとスコアとして加算されて最終的なスコア値がベンチマーク結果となります。リストの中でNotScoredとなっているものはチェックの有無に関わらずスコアに影響しないものです。
レベルとは
重要性を表しており、レベル1よりレベル2の方が重要度は高いです。
- レベル1
- 実用的かつ慎重であること
- 明確なセキュリティ上の利点を提供する
- 許容できる手段を超えてテクノロジーの有用性を阻害しない
- レベル2(レベル1の内容に加えて)
- セキュリティが最優先される環境またはユースケースを対象とする
- 多層防御として機能する
- テクノロジーの有用性またはパフォーマンスを悪影響を与える可能性がある
CISが公開しているAMIもあるよ
前回のブログでも紹介されていましたが、CISが公開している設定済みのAMIがありますのでご活用ください。 要塞化やハードニングなどの設定を行う際に便利かと思います。
AWS Marketplace : Center for Internet Security
まとめ
昔、社内サービスを立ち上げるときにRedhatの要塞化をやったので懐かしいなと思いつつも、初めて知る要素もあり学びは少なくなかったです。AMIが公開されているのはありがたいですね。要塞化されたEC2を作ってくれと言われたらすぐに使うと思います。EC2はパブリックサブネットに配置させないことが第一ですが、そうではないケースも当然ありますので、必要に応じてこういった資料を活用していければと思います。
この記事が何かのお役に立てば嬉しいです。